package com.justgame.project.service.just.aspect;

import com.justgame.project.cloud.common.util.HttpContextUtil;
import com.justgame.project.cloud.common.util.ShiroUtils;
import com.justgame.project.service.just.service.IJustViewGameLogService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

/**
 * 针对JustGameInfo切面
 * @author ZhouWeiBo
 * @create 2022/4/20
 */
@Aspect
@Component
@Slf4j
@RequiredArgsConstructor
public class JustGameInfoAspect {
    private final IJustViewGameLogService justViewGameLogService;

    /**
     * 初始化游戏详情浏览记录
     */
    @PostConstruct
    public void initGameViewData(){
        log.info("游戏详情浏览记录初始化开始...");
        log.info("游戏详情浏览记录初始化完毕！");
    }


    /**
     * 切点：调用查询游戏详情方法后就触发此AOP
     */
    @Pointcut("execution(public * com.justgame.project.service.just.service.IJustGameInfoService.getSecretDetail(..))")
    public void gameAdminViewPointcut(){}
    /**
     * 切点：调用查询游戏详情方法后就触发此AOP
     */
    @Pointcut("execution(public * com.justgame.project.service.just.service.IJustGameInfoService.getDetail(..))")
    public void gameViewPointcut(){}


    /**
     * AOP执行前调用此方法，相当于被切的方法执行前调用此方法
     */
    @After("gameAdminViewPointcut()")
    public void refreshGameAdminView(JoinPoint joinPoint){
        try {
            /* 获取方法执行时传入的参数 */
            Object[] objs=joinPoint.getArgs();
            Long gameId=(Long) objs[0];
            justViewGameLogService.baseAdd(gameId, ShiroUtils.getUserId(), HttpContextUtil.getIp());
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * AOP执行前调用此方法，相当于被切的方法执行前调用此方法
     */
    @After("gameViewPointcut()")
    public void refreshGameView(JoinPoint joinPoint){
        try {
            /* 获取方法执行时传入的参数 */
            Object[] objs=joinPoint.getArgs();
            Long gameId=(Long) objs[0];
            justViewGameLogService.baseAdd(gameId, ShiroUtils.getUserId(), HttpContextUtil.getIp());
        }catch (Exception e){
            e.printStackTrace();
        }
    }




}
